#pragma once

#include <iostream>
#include <string>
#include <vector>
#include "Student.h"

class StudentManager
{
private:
    std::vector<Student> students; // 存储学生信息的容器
    std::string currentUserRole;   // 当前用户角色

public:
    // 构造函数
    StudentManager(const std::string &role);

    // 设置当前用户角色
    void setCurrentUserRole(const std::string &role);

    // 检查是否具有管理员权限
    bool isAdmin() const;

    // 添加学生信息（仅管理员可执行）
    bool addStudent(const Student &student);

    // 删除学生信息（仅管理员可执行）
    bool deleteStudent(int id);

    // 修改学生信息（仅管理员可执行）
    bool updateStudent(int id, const std::string &newName, float newScore);

    // 查询学生信息（所有用户均可执行）
    bool queryStudent(int id, Student &student) const;

    // 显示所有学生信息（所有用户均可执行）
    void displayAllStudents() const;

    // 保存学生信息到文件（仅管理员可执行）
    bool saveToFile(const std::string &filename) const;

    // 从文件加载学生信息（仅管理员可执行）
    bool loadFromFile(const std::string &filename);

    // 记录操作日志（可选）
    void logOperation(const std::string &operation) const;
};

/*

构造函数：初始化StudentManager对象，接收当前用户角色作为参数。
setCurrentUserRole：设置当前用户角色，用于权限管理。
isAdmin：检查当前用户是否具有管理员权限，返回布尔值。
addStudent：添加学生信息，仅管理员可执行，返回布尔值表示操作是否成功。
deleteStudent：删除学生信息，仅管理员可执行，返回布尔值表示操作是否成功。
updateStudent：修改学生信息，仅管理员可执行，返回布尔值表示操作是否成功。
queryStudent：查询学生信息，所有用户均可执行，返回布尔值表示查询是否成功，查询结果通过引用参数返回。
displayAllStudents：显示所有学生信息，所有用户均可执行，无返回值。
saveToFile：保存学生信息到文件，仅管理员可执行，返回布尔值表示操作是否成功。
loadFromFile：从文件加载学生信息，仅管理员可执行，返回布尔值表示操作是否成功。
logOperation：记录操作日志，可选功能，用于记录系统的操作历史。

*/